﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using Evolution.Common;
using RamaSoft.Oficina;
using ComponentFactory.Krypton.Toolkit;

namespace TECassist
{
    public partial class TECassist : KryptonForm
    {
        public Evolution.Common.Win.WinApp MyApp = new Evolution.Common.Win.WinApp();

        public TECassist()
        {
            InitializeComponent();
        }

        private void Form_Load(object sender, EventArgs e)
        {
            if (!MyApp.Initialize(System.Reflection.Assembly.GetExecutingAssembly()))
            {
                MessageBox.Show("Banco de Dados não está conectado");
                this.Close();
                return;
            }
            if (MyApp.ApplicationUser.CheckPermission("SISTEMA.SEGURANÇA", false))
            {
                menuSenhas.Visible = true;
                menuSenhas.Enabled = true;
            }
            DateTime lastBkp = DateTime.Today.AddDays(-7);
            DirectoryInfo dir = new DirectoryInfo(@"C:\RamaSoft\BackUp");
            FileSystemInfo[] lstArqs = dir.GetFileSystemInfos("Teca*.BKP");
            foreach (FileSystemInfo arqvo in lstArqs)
            {
                string arqNome = arqvo.Name;
                DateTime arqData = Convert.ToDateTime(arqNome.Substring(8, 2) + "/"
                    + arqNome.Substring(6, 2) + "/" + arqNome.Substring(4, 2));
                if (arqData > lastBkp) lastBkp = arqData;
            }
            if (lastBkp < DateTime.Today.AddDays(-3))
            {
                txBackUp.Text = "*** Favor Aguardar ***\n\nBackUp em Andamento\n\nO último é anterior a 3 dias.";
                txBackUp.Visible = true;
                txBackUp.Refresh();
                Start.Enabled = true;
            }
        }

        private void menuProdAlterar_Click(object sender, EventArgs e)
        {
            Prods.Função = "Alteração";
            Prods frmProd = new Prods(MyApp.ApplicationDatabase);
            frmProd.ShowDialog(this); 
        }

        private void menuProdBaixa_Click(object sender, EventArgs e)
        {
            Prods.Função = "Baixa";
            Prods frmProd = new Prods(MyApp.ApplicationDatabase);
            frmProd.ShowDialog(this);
        }

        private void menuProdEntrada_Click(object sender, EventArgs e)
        {
            Prods.Função = "Entrada";
            Prods frmProd = new Prods(MyApp.ApplicationDatabase);
            frmProd.ShowDialog(this);
        }

        private void menuProdExcluir_Click(object sender, EventArgs e)
        {
            Prods.Função = "Exclusão";
            Prods frmProd = new Prods(MyApp.ApplicationDatabase);
            frmProd.ShowDialog(this);
        }

        private void menuProdNovo_Click(object sender, EventArgs e)
        {
            Prods.Função = "Inclusão";
            Prods frmProd = new Prods(MyApp.ApplicationDatabase);
            frmProd.ShowDialog(this);
        }

        private void menuProdTrocaCód_Click(object sender, EventArgs e)
        {
            Prods.Função = "Trocar Código";
            Prods frmProd = new Prods(MyApp.ApplicationDatabase);
            frmProd.ShowDialog(this);
        }

        private void menuSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void menuVendas_Click(object sender, EventArgs e)
        {
            Ponto frmVenda = new Ponto(MyApp.ApplicationDatabase);
            frmVenda.ShowDialog(this); 
        }

        private void menuRelatAnivo_Click(object sender, EventArgs e)
        {
            Relato.Ação = "Anivo";
            Relato frmRel = new Relato(MyApp.ApplicationDatabase);
            frmRel.ShowDialog();
        }

        private void menuRelatClientes_Click(object sender, EventArgs e)
        {
            Relato.Ação = "Cliente";
            Relato frmRel = new Relato(MyApp.ApplicationDatabase);
            frmRel.ShowDialog();
        }

        private void menuRelatEstoq_Click(object sender, EventArgs e)
        {
            Relato.Ação = "Estoque";
            Relato frmRel = new Relato(MyApp.ApplicationDatabase);
            frmRel.ShowDialog();
        }

        private void menuRelatMínimo_Click(object sender, EventArgs e)
        {
            Relato.Ação = "Mínimo";
            Relato frmRel = new Relato(MyApp.ApplicationDatabase);
            frmRel.ShowDialog();
        }

        private void menuRelatPreços_Click(object sender, EventArgs e)
        {
            Relato.Ação = "Preços";
            Relato frmRel = new Relato(MyApp.ApplicationDatabase);
            frmRel.ShowDialog();
        }

        private void menuVendaDia_Click(object sender, EventArgs e)
        {
            Relato.Ação = "VendaDia";
            Relato frmRel = new Relato(MyApp.ApplicationDatabase);
            frmRel.ShowDialog();
        }

        private void menuVendaMês_Click(object sender, EventArgs e)
        {
            Relato.Ação = "VendaMês";
            Relato frmRel = new Relato(MyApp.ApplicationDatabase);
            frmRel.ShowDialog();
        }

        private void menuTesoBxCliente_Click(object sender, EventArgs e)
        {
            Baixa.Ação = "BxCliente";
            ClienteSel.Ação = "BxCliente";
            ClienteSel frmCli = new ClienteSel(MyApp.ApplicationDatabase);
            frmCli.ShowDialog();
        }

        private void menuTesoBxNúmero_Click(object sender, EventArgs e)
        {
            Baixa.Ação = "BxNúmero";
            Baixa frmBaixa = new Baixa(MyApp.ApplicationDatabase);
            frmBaixa.ShowDialog();
        }

        private void menuTesoVencidos_Click(object sender, EventArgs e)
        {
            Finanças.Ação = "Vencidos";
            Finanças frmFina = new Finanças(MyApp.ApplicationDatabase);
            frmFina.ShowDialog(this);
        }

        private void menuTesoCrédito_Click(object sender, EventArgs e)
        {
            Finanças.Ação = "Crédito";
            Finanças frmFina = new Finanças(MyApp.ApplicationDatabase);
            frmFina.ShowDialog(this);
        }

        private void menuTesoBoletos_Click(object sender, EventArgs e)
        {
            Finanças.Ação = "Boletos";
            Finanças frmFina = new Finanças(MyApp.ApplicationDatabase);
            frmFina.ShowDialog(this);
        }

        private void menuOrdens_Click(object sender, EventArgs e)
        {
            TarefaSel frmOrdPesq = new TarefaSel(MyApp.ApplicationDatabase);
            frmOrdPesq.ShowDialog(this); 
        }

        private void menuSenhas_Click(object sender, EventArgs e)
        {
            MyApp.SecurityManager();
        }

        private void menuAdmMãodeObra_Click(object sender, EventArgs e)
        {
            Relato.Ação = "MObra";
            Relato frmRel = new Relato(MyApp.ApplicationDatabase);
            frmRel.ShowDialog();
        }

        private void menuMObraSema_Click(object sender, EventArgs e)
        {
            Relato.Ação = "MObraSema";
            Relato frmRel = new Relato(MyApp.ApplicationDatabase);
            frmRel.ShowDialog();
        }

        private void menuMObraMês_Click(object sender, EventArgs e)
        {
            Relato.Ação = "MObraMês";
            Relato frmRel = new Relato(MyApp.ApplicationDatabase);
            frmRel.ShowDialog();
        }

        private void menuExcluir_Click(object sender, EventArgs e)
        {
            string qAção = ((ToolStripMenuItem)sender).Text;
            Cadastro.Ação = qAção.Remove(0, 1);  
            Cadastro frmCada = new Cadastro(MyApp.ApplicationDatabase);
            frmCada.ShowDialog(this); 
        }

        private void menuDespExcluir_Click(object sender, EventArgs e)
        {
            DespSel.Ação = "Excluir";
            DespSel frmDesp = new DespSel(MyApp.ApplicationDatabase);
            frmDesp.ShowDialog(this);
        }

        private void menuDespInclo_Click(object sender, EventArgs e)
        {
            DespSel.Ação = "Inclusão";
            DespSel frmDesp = new DespSel(MyApp.ApplicationDatabase);
            frmDesp.ShowDialog(this);
        }

        private void menuDespPagto_Click(object sender, EventArgs e)
        {
            DespSel.Ação = "Pagamento";
            DespSel frmDesp = new DespSel(MyApp.ApplicationDatabase);
            frmDesp.ShowDialog(this);
        }

        private void menuDespSituação_Click(object sender, EventArgs e)
        {
            DespSit frmSitua = new DespSit(MyApp.ApplicationDatabase);
            frmSitua.ShowDialog(this);
        }

        private void menuProdRefNova_Click(object sender, EventArgs e)
        {
            ProdRef.Ação = "Nova";
            ProdRef frmRefer = new ProdRef(MyApp.ApplicationDatabase);
            frmRefer.ShowDialog(this);
        }

        private void menuProdRefVer_Click(object sender, EventArgs e)
        {
            ProdRef.Ação = "Ver";
            ProdRef frmRefer = new ProdRef(MyApp.ApplicationDatabase);
            frmRefer.ShowDialog(this);
        }

        private void menuBackUp_Click(object sender, EventArgs e)
        {
            txBackUp.Text = "*** Favor Aguardar ***\n\nBackUp em Andamento";
            txBackUp.Visible = true;
            txBackUp.Refresh();
            Start.Enabled = true;
        }

        private void rot_BackUp()
        {
            cadGeral regGeral = new cadGeral(MyApp.ApplicationDatabase);
            regGeral.Tipo = "Y";
            regGeral.Código = 1;
            int dbRet = regGeral.Obter();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: " + this.Name  + "BackUpGeral\n" + regGeral.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            string bkpPgLoc = regGeral.Descrição.Trim();
            string bkpPgSQL = "pg_dump.exe -i -h localhost -p 5432 -U postgres -F c -b -v -f ";
            string bkpLocal = @" ""C:\RamaSoft\BackUp\Teca" + DateTime.Today.ToString("yyMMdd") + @".BKP"" ";
            string bkpDBase = "TECassist_db";
            string bkpParam = @"""" + bkpPgLoc + @"""" + bkpPgSQL + bkpLocal + bkpDBase;
            FileInfo bkpArqvo = new FileInfo(@"C:\RamaSoft\BackPostG.bat");
            if (bkpArqvo.Exists) bkpArqvo.Delete();
            StreamWriter arqPut = File.CreateText(bkpArqvo.FullName);
            arqPut.Write(bkpParam);
            arqPut.Close();
            DateTime lastWeek = DateTime.Today.AddDays(-7);
            DirectoryInfo dir = new DirectoryInfo(@"C:\RamaSoft\BackUp");
            FileSystemInfo[] lstArqs = dir.GetFileSystemInfos("Teca*.BKP");
            foreach (FileSystemInfo arqvo in lstArqs)
            {
                string arqNome = arqvo.Name;
                DateTime arqData = Convert.ToDateTime(arqNome.Substring(8, 2) + "/"
                    + arqNome.Substring(6, 2) + "/" + arqNome.Substring(4, 2));
                if (arqData < lastWeek) arqvo.Delete();
            }
            System.Diagnostics.Process pgm = new System.Diagnostics.Process();
            pgm.StartInfo.FileName = bkpArqvo.FullName;
            try
            {
                pgm.Start();
                pgm.WaitForExit();
            }
            catch (Win32Exception errCode)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: " + this.Name + "BackUpExec\n" + errCode.NativeErrorCode.ToString(),
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            MessageBox.Show("CONCLUÍDO", "BACKUP");
            txBackUp.Visible = false;
        }

        private void Start_Tick(object sender, EventArgs e)
        {
            Start.Enabled = false;
            rot_BackUp();
        }

        private void menuCliHistórico_Click(object sender, EventArgs e)
        {
            ClienteSel.Ação = "HISTO";
            ClienteSel frmCli = new ClienteSel(MyApp.ApplicationDatabase);
            frmCli.ShowDialog(this);
        }

        private void menuCliCadastro_Click(object sender, EventArgs e)
        {
            ClienteSel.Ação = "GERAL";
            ClienteSel frmCli = new ClienteSel(MyApp.ApplicationDatabase);
            frmCli.ShowDialog(this);
        }

        private void menuCliTelefone_Click(object sender, EventArgs e)
        {
            ClienteSel.Ação = "TELEFO";
            ClienteSel frmCli = new ClienteSel(MyApp.ApplicationDatabase);
            frmCli.ShowDialog(this);
        }

    }
}
